#pragma once
#include<type_traits>

template <int F, int S>
struct OphthalmologyUnit {
    enum { DimOne = F, DimTwo = S };
};

template <typename T>
struct isOphUnitType : std::false_type {};

template <int F, int S>
struct isOphUnitType<OphthalmologyUnit<F, S>> :std::true_type {};

template <typename T>
concept OphUnitType = isOphUnitType<T>::value;

template <typename T, typename Ty> requires OphUnitType<T>
class UnitedValue {
    Ty _magnitude{};
public:
    constexpr explicit UnitedValue(const Ty magnitude) noexcept :
        _magnitude(magnitude) {
    }


    constexpr Ty value() const noexcept {
        return _magnitude;
    }
};
